嗨,今天是第27天,美好的星期日終於好好放鬆了,早上還去看電影呢(笑)。
好的,我們回到主題,回想剛開始在學的時候遇到了一個問題,在爬某些網站的時候一直連不上,像是如下圖:
是因為我們一般寫的爬蟲時會默認告訴服務器自己發送了爬取請求,有的網站是不允許被爬蟲的,大概是因為會涉及到商業問題吧?最後,所以我們可以設定User-Agent
假裝自己是瀏覽器,因為User-Agent
會告訴網站它是透過什麼工具(通過UA分析出瀏覽器名稱、瀏覽器版本號、渲染引擎、操作系統)發送請求的,就可以騙過該網站了?
在
HTTP
中,User-Agent
字串通常被用於內容協商,而原始伺服器為該回應選擇適當的內容或操作參數。例如,User-Agent
字串可能被網路伺服器用以基於特定版本的用戶端軟體的已知功能選擇適當的變體。
該如何知道自己的User-Agent
?
來看User-Agent
這長串代表什麼意思
Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]
下面這個是我的User-Agent
:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6
Safari
瀏覽器,瀏覽器版本11.0.3
,網頁渲染引擎WebKit 604.5.6
,電腦操作系統Mac OS
。Mozilla/5.0
是一個通用標記符號,用來表示與Mozilla相容,這幾乎是現代瀏覽器的標配。Gecko
排版引擎(頁面渲染引擎)知道了該如何查看User-Agent
後,我們就將它加到Scrapy
中吧,開啟檔案setttings.py
,USER_AGENT=
後貼上你的User-Agent
字串:
USER_AGENT = 'Mozilla/5.0 (...)'
接著,再執行一次我的爬蟲程式,就會看到多了下面這一行:
還有成功(200)
的訊息:
就表示我們設定完User-Agent
後就可以爬到該網站的內容了!
除了查看自己瀏覽器的UA
外,現在我們來看一下如何隨機生成UA吧!也就是使用fake-useragent
!
fake-useragent
:virtualenv
:source path/to/your/virtualenv/bin/activate
若沒有fake-useragent
套件,可用pip
安裝:
pip3
則將pip
改成pip3
pip install fake-useragent
from fake_useragent import UserAgent
ua = UserAgent()
ie
的UAua.ie
# 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)'
Chrome
的UAua.chrome
# 'Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36'
ua.random
如下圖,可以看到隨機產生不同的UA
Scrapy
加入fake-useragent
可以用 GitHub - alecxe/scrapy-fake-useragent: Random User-Agent middleware based on fake-useragent ,只要依照文件上面的設定增加middlewares
就行了,它是基於fake-useragent
的一個middleware
程式,很簡單,所以這裡就不再操作了。好的,今天說明了UA
,以及用Python隨機產生假的UA
,那就明天見了!
使用者代理 - 維基百科,自由的百科全書
fake-useragent · PyPI